package com.forestar.mapControl.utils.tile.tileget;

public class MzWebTileSource {}
//        extends MzTileSource
//  {
//    private static final Locale MAPBOX_LOCALE = Locale.US;
//    private static final String TAG = "MzWebTileSource";
//    private final MapControl mapControl;
//    private final MzTileSettingCallback tileSettingCallback;
//    // Tracks the number of threads active in the getBitmapFromURL method.
//    private AtomicInteger activeThreads = new AtomicInteger(0);
//    protected boolean mEnableSSL = false;
//    private boolean offlineEnabled = true;
//
//    //TODO:zq--这里应该不需要Control，现在为了做影像压缩对比测试，把mapcontrol放时来，后续再考虑要不要留着。
//    public MzWebTileSource(MapControl mapControl, final String pId, final String url, @NonNull final MzTileSettingCallback tileSettingCallback, final boolean enableSSL)
//      {
//        super(url, pId);
//        this.tileSettingCallback = tileSettingCallback;
//        this.mapControl = mapControl;
//        initialize(pId, url, enableSSL);
//      }
//
//    public MzTileSource setURL(final String aUrl)
//      {
//        if (aUrl.contains(String.format(MAPBOX_LOCALE, "http%s://", (mEnableSSL ? "" : "s"))))
//          {
//            url = aUrl.replace(String.format(MAPBOX_LOCALE, "http%s://", (mEnableSSL ? "" : "s")), String.format(MAPBOX_LOCALE, "http%s://", (mEnableSSL ? "s" : "")));
//          } else
//          {
//            url = aUrl;
//          }
//        return this;
//      }
//
//    protected void initialize(String pId, String aUrl, boolean enableSSL)
//      {
//        mEnableSSL = enableSSL;
//        setURL(aUrl);
//      }
//
//    /**
//     * Gets a list of Tile URLs used by this layer for a specific tile.
//     *
//     * @param aTile a map tile
//     * @param hdpi  a boolean that indicates whether the tile should be at 2x or
//     *              retina size
//     * @return a list of tile URLS
//     */
//    public String[] getTileURLs(final MzTileBean aTile, boolean hdpi)
//      {
//        String url = getTileURL(aTile, hdpi);
//        if (!TextUtils.isEmpty(url))
//          {
//            return new String[]{url};
//          }
//        return null;
//      }
//
//    /**
//     * Get a single Tile URL for a single tile.
//     *
//     * @param aTile a map tile
//     * @param hdpi  a boolean that indicates whether the tile should be at 2x or
//     *              retina size
//     * @return a list of tile URLs
//     */
//    public String getTileURL(final MzTileBean aTile, boolean hdpi)
//      {
//        return parseUrlForTile(url, aTile, hdpi);
//      }
//
//    protected String parseUrlForTile(String url, final MzTileBean aTile, boolean hdpi)
//      {
//        return url.replace("{z}", String.valueOf(aTile.getLevel())).replace("{x}", String.valueOf(aTile.getX())).replace("{y}", String.valueOf(aTile.getY())).replace("{2x}", hdpi ? "@2x" : "");
//      }
//
//    private static final Paint compositePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
//
//    private Bitmap compositeBitmaps(final Bitmap source, Bitmap dest)
//      {
//        Canvas canvas = new Canvas(dest);
//        canvas.drawBitmap(source, 0, 0, compositePaint);
//        return dest;
//      }
//
//    @Override
//    public CacheableBitmapDrawable getDrawableFromTile(final MzTileCache cache, final MzTileBean tile, boolean hdpi, boolean allowLoadFromNet)
//      {
//        CacheableBitmapDrawable result = null;
//        int loadWebTileType = MapzoneConfig.getInstance().getIntValue(LOAD_WEBTILE_TYPE_PREFERENCES_KEY, LOAD_WEBTILE_ONLY_WIFI);
//        MZLog.MZStabilityLog("当前影像下载状态为:" + loadWebTileType);
//        if (!(loadWebTileType == LOAD_WEBTILE_ONLY_WIFI_REFRESH || loadWebTileType == LOAD_WEBTILE_ALL_NETWORK_REFRESH))
//          {
//            //zq--增加在本地磁盘缓存获取影像，cache会自动把影像放到内存缓存中。
//            //如果是混合瓦片，在磁盘缓存中取到的已经是混合后的瓦片。
//            long start = System.currentTimeMillis();
//            result = cache.getMzTileFromDisk(tile);
//            if (null != result)
//            {
//              long end = System.currentTimeMillis();
//              GISLog.sysLog("", "Refresh Track MzWebTileSource-CacheableBitmapDrawable. getTileFromDisk time = " + (end - start));
//              return result;
//            }
//            String tilePath = tileSettingCallback.getTileOfflineRootPath() + File.separator + sourceKey + File.separator + tile.getRelativePath();
//            File tileFile = new File(tilePath);
//            if (tileFile.exists() && tileFile.isFile())
//              {
//                Bitmap bitmap = BitmapFactory.decodeFile(tilePath);
//                if (bitmap != null)
//                  {
//                    return cache.putTileInMemoryCache(tile, bitmap);
//                  }
//              }
//            if (!allowLoadFromNet)
//              {
//                return null;
//              }
//            //TODO:zq--获取urls先保留，为后续把多个图层的瓦片压缩到一张瓦片上做准备。
//            String[] urls = getTileURLs(tile, hdpi);
//            if (urls == null)
//              {
//                MZLog.MZStabilityLog("瓦片" + tile.getCacheKey() + "url为空");
//                return null;
//              }
//            Bitmap resultBitmap = null;
//            //zq--从网络获取影像，把影像同时放到tilediskcache和Memcache中。
//            for (final String url : urls)
//              {
//                GISLog.sysLog("", "MzWebTileSource url = { " + url + " }");
//                Bitmap bitmap = getBitmapFromURL(tile, url, cache, tilePath);
//                if (bitmap == null)
//                  {
//                    continue;
//                  }
//                if (resultBitmap == null)
//                  {
//                    resultBitmap = bitmap;
//                  } else
//                  {
//                    resultBitmap = compositeBitmaps(bitmap, resultBitmap);
//                  }
//              }
//            result = resultBitmap == null ? null : cache.putTileBitmap(tile, resultBitmap);
//            return result;
//          } else
//          {
//            if (allowLoadFromNet)
//              {
//                //TODO:zq--获取urls先保留，为后续把多个图层的瓦片压缩到一张瓦片上做准备。
//                String[] urls = getTileURLs(tile, hdpi);
//                if (urls == null)
//                  {
//                    MZLog.MZStabilityLog("瓦片" + tile.getCacheKey() + "url为空");
//                    return null;
//                  }
//                Bitmap resultBitmap = null;
//                //zq--从网络获取影像，把影像同时放到tilediskcache和Memcache中。
//                for (final String url : urls)
//                  {
//                    GISLog.sysLog("", "MzWebTileSource url = { " + url + " }");
//                    String tilePath = tileSettingCallback.getTileOfflineRootPath() + File.separator + sourceKey + File.separator + tile.getRelativePath();
//                    Bitmap bitmap = getBitmapFromURL(tile, url, cache, tilePath);
//                    if (bitmap == null)
//                      {
//                        continue;
//                      }
//                    if (resultBitmap == null)
//                      {
//                        resultBitmap = bitmap;
//                      } else
//                      {
//                        resultBitmap = compositeBitmaps(bitmap, resultBitmap);
//                      }
//                  }
//                result = resultBitmap == null ? null : cache.putTileBitmap(tile, resultBitmap);
//                if (null != result)
//                  {
//                    return result;
//                  }
//              }
//            result = cache.getMzTileFromDisk(tile);
//            if (null != result)
//              {
//                return result;
//              }
//            String tilePath = tileSettingCallback.getTileOfflineRootPath() + File.separator + sourceKey + File.separator + tile.getRelativePath();
//            File tileFile = new File(tilePath);
//            if (tileFile.exists() && tileFile.isFile())
//              {
//                Bitmap bitmap = BitmapFactory.decodeFile(tilePath);
//                if (bitmap != null)
//                  {
//                    return cache.putTileInMemoryCache(tile, bitmap);
//                  }
//              }
//            return null;
//          }
//      }
//
//    @Override
//    public void detach()
//      {
//      }
//
//    @Override
//    public MzTileSource setName(String layerSourceKey)
//      {
//        return this;
//      }
//
//    /**
//     * Requests and returns a bitmap object from a given URL, using tileCache to
//     * decode it.
//     *
//     * @param tile      MzTileBean
//     * @param url       the map tile url. should refer to a valid bitmap resource.
//     * @param tileCache a cache, an instance of MapTileCache
//     * @return the tile if valid, otherwise null
//     */
//    public Bitmap getBitmapFromURL(MzTileBean tile, final String url, final MzTileCache tileCache, String tilePath)
//      {
//        activeThreads.incrementAndGet();
//        if (TextUtils.isEmpty(url))
//          {
//            activeThreads.decrementAndGet();
//            return null;
//          }
//        try
//          {
//            //TODO:zq--下载影像的代码，后续重构，去掉mapbox
//            byte[] tileStream = MzTileNetworkUtils.getTileStream(new URL(url));
//            if (tileStream == null)
//              {
//                MZLog.MZStabilityLog("下载瓦片" + tile.getCacheKey() + "失败 url:" + url);
//                return null;
//              }
//            File tileFile = new File(tilePath);
//            if (tileFile.exists())
//              {
//                tileFile.delete();
//                FileOutputStream fileOut = null;
//                InputStream inputStream = null;
//                try
//                  {
//                    inputStream = new ByteArrayInputStream(tileStream);
//                    fileOut = new FileOutputStream(tileFile);
//                    byte[] buf = new byte[1024 * 8];
//                    int read = -1;
//                    while ((read = inputStream.read(buf, 0, buf.length)) > 0)
//                      {
//                        fileOut.write(buf, 0, read);
//                      }
//                    fileOut.flush();
//                  } finally
//                  {
//                    if (null != fileOut)
//                      {
//                        fileOut.close();
//                      }
//                    if (null != inputStream)
//                      {
//                        inputStream.close();
//                      }
//                  }
//
//              }
//            Bitmap bitmap = BitmapFactory.decodeByteArray(tileStream, 0, tileStream.length);
//            if (bitmap != null)
//              {
//                tileCache.putTileBitmap(tile, bitmap);
//                GeoMap.bitmapCountSize = GeoMap.bitmapCountSize + bitmap.getRowBytes() * bitmap.getHeight() / 1024;
//              } else
//              {
//                MZLog.MZStabilityLog("瓦片" + tile.getCacheKey() + "失败转换bitmap失败");
//              }
//            return bitmap;
//          } catch (final Throwable e)
//          {
//            Log.e(TAG, "Error downloading MzTileBean: " + url + ":" + e);
//          } finally
//          {
//            activeThreads.decrementAndGet();
//          }
//        return null;
//      }
//
//    public void setOfflineEnabled(boolean enabled)
//      {
//        this.offlineEnabled = enabled;
//      }
//  }
